/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Dao;

import BackEnd.Exceptions.*;
import com.mysql.jdbc.*;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Ivan
 */
public class EstadoUsuarioDao extends DaoBase
{

    @Override
    public ValueObjectBase create(ValueObjectBase value) throws CreateRegisterException
    {
        if(value.getClass()==EstadoUsuarioValueObject.class)
        {
            EstadoUsuarioValueObject vo=(EstadoUsuarioValueObject)value;
            
            try {
                Connection con = super.getConection("dlc");
                String sentencia="CALL pa_registarEstadoUsuario(?,?,?)";
                java.sql.CallableStatement wcall=con.prepareCall(sentencia);
                wcall.setString(1, vo.getNombre());
                wcall.setString(2, vo.getDescripcion());
                wcall.setString(3, "@a");
                wcall.registerOutParameter(3, Types.INTEGER);
                wcall.execute();
                vo.setId(wcall.getInt(3));
                wcall.close();
                con.close();
            } catch (SQLException ex) {                
                    throw new CreateRegisterException();
                }
             return vo;
        }
        else
            throw new CreateRegisterException();
    }

    @Override
    public void update(ValueObjectBase value) throws UpdateRegisterException {
        EstadoUsuarioValueObject vo=(EstadoUsuarioValueObject)value;

            Connection con;
        try {
            con = super.getConection("dlc");

            String sentencia="call pa_updateEstadoUsuario(?,?,?)";
            java.sql.CallableStatement wcall=con.prepareCall(sentencia);
            wcall.setInt(1, vo.getId());
            wcall.setString(2, vo.getNombre());
            wcall.setString(3, vo.getDescripcion());
            wcall.execute();
            wcall.close();
            con.close();
            } catch (SQLException ex) {
           throw new UpdateRegisterException();
        }
    }

    @Override
    public ValueObjectBase retrive(PkBase pk) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void delete(PkBase pk) throws DeleteRegisterException {
        if(pk.getClass()==PkId.class)
        {
            Connection con;
            PkId id=(PkId)pk;
            try {
                con = super.getConection("dlc");
            String sentencia="call pa_borrarEstadoUsuario(?)";
            java.sql.CallableStatement wcall=con.prepareCall(sentencia);
            wcall.setInt(1, id.getId());
            wcall.execute();
            wcall.close();
            con.close();
             } catch (SQLException ex) {
               throw new DeleteRegisterException();
            }
        }
        else
            throw new DeleteRegisterException();
    }

    @Override
    public ValueObjectBase[] listarTodos() throws NotExistRegisterException {
        return this.mostrarConsulta("select * from estadousuario");
    }

    @Override
    public ValueObjectBase[] mostrarConsulta(String consulta) throws NotExistRegisterException
    {
        EstadoUsuarioValueObject[] vec=null;
            try {
                Connection con = super.getConection("dlc");
                Statement st=(Statement)con.createStatement();
                st.execute(consulta);
                ResultSet res=(ResultSet) st.getResultSet();
                res.last();
                vec = new EstadoUsuarioValueObject[res.getRow()];
                res.first();
                vec[0]=this.leerVo(res);
                while(res.next())
                {
                    vec[res.getRow()-1]=this.leerVo(res);
                }
                res.close();
                con.close();

            } catch (SQLException ex) {
                throw new NotExistRegisterException();
            }
        return vec;
    }

    @Override
    public ValueObjectBase traer(PkBase pk) throws NotExistRegisterException {
        PkId id=(PkId)pk;
        if(id.getClass() == PkId.class)
        {
            EstadoUsuarioValueObject vo = new EstadoUsuarioValueObject();
            try {
                Connection con = super.getConection("dlc");
                String sentencia = "select * from estadousuario where id="+id.getId();
                Statement st=(Statement)con.createStatement();
                st.execute(sentencia);
                ResultSet res=(ResultSet) st.getResultSet();
                res.next();
                vo=this.leerVo(res);
                res.close();
                con.close();

            } catch (SQLException ex) {
               throw new NotExistRegisterException();
            }

            return vo;
        }
        else
            return null;
    }
    private EstadoUsuarioValueObject leerVo(ResultSet res) throws SQLException
    {
        EstadoUsuarioValueObject vo=new EstadoUsuarioValueObject();
        vo.setId(res.getInt("id"));
        vo.setNombre(res.getString("nombre"));
        vo.setDescripcion(res.getString("descripcion"));
        return vo;
    }

}
